/**
 * 在这里定义和用户相关的路由处理函数，供 /router/user.js 模块进行调用
 */

// 导入数据库操作模块
const db = require('../db/index')

const bcrypt = require('bcryptjs')

// 用这个包来生成 Token 字符串
const jwt = require('jsonwebtoken')

// 导入配置文件
const config = require('../config')

// 导入菜单栏数据
const menus = require('../menus/index')

// 注册处理函数
exports.regUser = (req, res) => {
  // 接收表单数据
  const userinfo = req.body
  // 判断数据是否合法
  if(!userinfo.username || !userinfo.password) {
    return res.send({
      status: 1,  // 1 失败  0 成功
      message: '用户名或密码不能为空!'
    })
  }

  // 定义SQL语句
  const sql = `select * from sale_users where username = ?`
  db.query(sql, userinfo.username, (err, results) => {
    if(err) return res.cc(err)
    if(results.length >0 ) return res.cc('用户名被占用，请更换其他用户名！')
    // 对用户的密码,进行 bcrype 加密，返回值是加密之后的密码字符串
    userinfo.password = bcrypt.hashSync(userinfo.password, 10)

    // 定义插入用户的SQL 语句
    const sql = `insert into sale_users set ?`
    db.query(sql, { username: userinfo.username, password: userinfo.password }, (err, results) => {
      if(err) return res.cc(err)
      if(results.affectedRows !== 1) return res.cc('注册用户失败，请稍后再试！')
      // 注册成功
      res.cc('注册成功！', 0)
    })
  })
}


// 登录处理函数
exports.login = (req, res) => {
  const userinfo = req.body
  const sql = `select * from sale_users where username =?`
  db.query(sql, userinfo.username, (err, results) => {
    if(err) return res.cc(err)
    if(results.length !== 1) return res.cc('登录失败！')
    // 拿着用户输入的密码,和数据库中存储的密码进行对比
    const compareResult = bcrypt.compareSync(userinfo.password, results[0].password)

    // 如果对比的结果等于 false, 则证明用户输入的密码错误
    if (!compareResult) {
      return res.cc('登录失败！')
    }
    // 通过ES6的高级语法，快速剔除 密码和 头像的值
    // 在服务器端生成 Token 的字符串
    const user = {...results[0],password:'',user_pic:''}
    let menusList = null
    if(user.username === 'admin') {
      menusList = menus[0]
    } else {
      menusList = menus[1]
    } 
    // 对用户的信息进行加密，生成 Token 字符串
    const tokenStr = jwt.sign(user,config.jwtSecretKey,{expiresIn:config.expiresIn})
    res.send({
      status: 0,
      message: '登录成功！',
      // 为了方便客户端使用 Token，在服务器端直接拼接上 Bearer 的前缀
      token: 'Bearer ' + tokenStr,
      rights: menusList,
      username: user.username,
      // user_pic: user.user_pic
    })
  })
}